08

Дневная сводка: Python Libr — 8 мая 2026

8 мая канал «Python Libr» выпускает две короткие обучающие заметки серии «#урок». День минимален по объёму, но даёт два самостоятельных сюжета о служебных конструкциях Python: модуле __future__ и декораторе @dataclass.


Ключевые события и темы

Модуль __future__: переносим фичи будущих версий в текущий код

Первая заметка объясняет смысл стандартного модуля __future__: импорты вида from __future__ import <feature> включают в текущем модуле поведение, которое появится (или уже появилось) в следующих версиях интерпретатора. Канонические примеры в посте — функция print и оператор деления (/ в Python 3 всегда даёт float, в Python 2 мог давать int). Авторы отдельно вспоминают традиционную пасхалку from __future__ import braces, которая выдаёт SyntaxError: not a chance.

from __future__ import print_function, division

print(1 / 2)   # 0.5 даже в Python 2
print(1 // 2)  # 0 — целочисленное деление сохраняется

# from __future__ import braces  # SyntaxError: not a chance

В современной практике __future__ остаётся полезным для авторов библиотек, поддерживающих несколько версий, и для аккуратной миграции на новые семантики (annotations по PEP 563 — характерный пример).

Ссылки:

@dataclass: компактные «контейнеры данных» одной строкой

Вторая заметка дня — про декоратор @dataclass из стандартного модуля dataclasses. Декоратор автоматически генерирует методы __init__, __eq__, __repr__, __hash__ и ряд других на основе аннотаций типов в теле класса. Принцип такой же, как у __future__, — экономия рутины: ту работу, которую обычно пишут руками, делает компилятор. Канал отдельно подчёркивает, что поля без аннотации типа игнорируются генератором.

from dataclasses import dataclass

@dataclass
class Point:
    x: float
    y: float
    label: str = "origin"

p = Point(1.0, 2.0)
print(p)            # Point(x=1.0, y=2.0, label='origin')
print(p == Point(1.0, 2.0))  # True

Ссылки:


Итог

Два коротких обучающих поста о служебных конструкциях Python. Логически они связаны общим мотивом — «компилятор делает рутину за вас»: __future__ переносит синтаксис будущих версий в текущую, @dataclass снимает с разработчика рутину по описанию __init__/__eq__/__repr__. Полезный набор для разработчиков, поддерживающих несколько версий или мигрирующих на современные стандарты.

Файлы
source.txt 18 B